home *** CD-ROM | disk | FTP | other *** search
- (*
- ===========================================================================
- BBS: Canada Remote Systems
- Date: 07-14-93 (10:28) Number: 30550
- From: BERNIE PALLEK Refer#: NONE
- To: DENNIS HO Recvd: NO
- Subj: NEATO VIDEO TRICKS Conf: (1221) F-PASCAL
- ---------------------------------------------------------------------------
- DH> Could anyone possibly tell me how I could make the
- DH> characters on the screen change the the next letter until
- DH> they are Z then they disappear? Sort of a melting effect.
- DH> I realize that this would probably have to be done in ASM
- DH> but I would just like the source to incorperate into one of
- DH> my programs.
-
- Hi, Dennis. Just a suggestion: it would probably look better if they
- decremented down to a space character (and it would be easier to
- program), but here's an example:
- *)
-
- PROGRAM MeltTheCharactersInVideoMemory;
-
- { untested, by Bernie Pallek, 1993 }
- { best used in 80x25 mode, or you may have problems :') }
-
- { I don't think the program needs a USES clause }
-
- CONST
- vidSeg : Word = $B800; { use $B000 for mono monitors }
-
- VAR
- max : Byte;
- w1,
- w2 : Word;
-
- BEGIN
- { the below part finds the max. number of iterations req'd by
- the melting loop }
- max := 0;
- FOR w1 := 0 TO 1999 DO IF (Mem[vidSeg : w1 * 2] > max) THEN
- max := Mem[vidSeg : w1 * 2];
- { I know, I know, bad indenting style :') }
- FOR w1 := 1 TO max DO { could be from *0* TO max }
- { by using w1 * 2, we skip the colour attributes }
- FOR w2 := 0 TO 1999 DO IF (Mem[vidSeg : w2 * 2] > 32) THEN
- Mem[vidSeg : w2 * 2] := Mem[vidSeg : w2 * 2] - 1;
- END.
-
- Oh, you want me to *explain* it. I see. Well, text video memory is set
- up like this: 4000 bytes starting at $B800 (for colour, $B000 for mono).
- The first byte ($B800 : 0) rep's the ASCII code of the char at 1, 1
- (screen pos.), and the next byte ($B800 : 1) rep's the colour attribute
- of the char at 1, 1. Then comes the ASCII code for the next character,
- and then the colour for it. This keeps going, and when you reach memory
- position $B800 : 160 (that 160 is decimal, not hex), it wraps to the
- next line on your screen. This goes on until you reach $B800 : 3999,
- which is the lower-right char's colour attribute.
- The beginning part just finds how many times the characters will have
- to be updated before they are all space characters.
- BTW, sorry for not making them turn to Zs; it was easier to do it with
- spaces, and you may modify the program as you wish.
-
- Have fun, TTYL.
-
- Bernie.
- ___
- * SLMR 2.0 * ... I wouldn't be caught dead with a necrophiliac!
-
- --- Maximus 2.01wb
- * Origin: * idiot savant * +1 416 935 6628 * (1:247/128)